{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "provenance": [],
      "authorship_tag": "ABX9TyMiMATEyDKlknnRe9lnFQ1e",
      "include_colab_link": true
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "language_info": {
      "name": "python"
    },
    "accelerator": "GPU",
    "gpuClass": "standard",
    "widgets": {
      "application/vnd.jupyter.widget-state+json": {
        "6236e2d615a44408962f3ba91248239e": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HBoxModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HBoxModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HBoxView",
            "box_style": "",
            "children": [
              "IPY_MODEL_1f7210b64c374af28232afc438237e32",
              "IPY_MODEL_94795d9327d044c8b4fe41d7f4f0f6b1",
              "IPY_MODEL_0b75b8fc1418412383527588804d92d0"
            ],
            "layout": "IPY_MODEL_05e0ea1fc29640ab80b01ac14fb378b7"
          }
        },
        "1f7210b64c374af28232afc438237e32": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_8e286499ba3541c6962e1bc7ac907d38",
            "placeholder": "​",
            "style": "IPY_MODEL_c867464a923f4ac7a17500f7ac1eed18",
            "value": "100%"
          }
        },
        "94795d9327d044c8b4fe41d7f4f0f6b1": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "FloatProgressModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "FloatProgressModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "ProgressView",
            "bar_style": "success",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_b04574144aa74f4791f0fa0631f5714a",
            "max": 9912422,
            "min": 0,
            "orientation": "horizontal",
            "style": "IPY_MODEL_c3852df99fc544cba7c75f2afe48b972",
            "value": 9912422
          }
        },
        "0b75b8fc1418412383527588804d92d0": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_328f7ec5662a43dfbca33e4fe8c30829",
            "placeholder": "​",
            "style": "IPY_MODEL_6cd905900e5445988f93b90bc376ebfd",
            "value": " 9912422/9912422 [00:00&lt;00:00, 183897413.95it/s]"
          }
        },
        "05e0ea1fc29640ab80b01ac14fb378b7": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "8e286499ba3541c6962e1bc7ac907d38": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "c867464a923f4ac7a17500f7ac1eed18": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "b04574144aa74f4791f0fa0631f5714a": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "c3852df99fc544cba7c75f2afe48b972": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "ProgressStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "ProgressStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "bar_color": null,
            "description_width": ""
          }
        },
        "328f7ec5662a43dfbca33e4fe8c30829": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "6cd905900e5445988f93b90bc376ebfd": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "5ef4ab5857c94034a28916341c952d42": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HBoxModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HBoxModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HBoxView",
            "box_style": "",
            "children": [
              "IPY_MODEL_e93183366c7d4059bb5cc2c458abb3a5",
              "IPY_MODEL_8f2fffb4d802454c9cf5b54f40e91a79",
              "IPY_MODEL_3e008ea60cf9437f86aa8a0d70b1f15b"
            ],
            "layout": "IPY_MODEL_a3447d082d304f78b5c1125a15dafbc0"
          }
        },
        "e93183366c7d4059bb5cc2c458abb3a5": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_3df1acb68fb8432d8dc1f67b0331ab48",
            "placeholder": "​",
            "style": "IPY_MODEL_46d18bb77b9848a8baf9355c11de26dd",
            "value": "100%"
          }
        },
        "8f2fffb4d802454c9cf5b54f40e91a79": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "FloatProgressModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "FloatProgressModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "ProgressView",
            "bar_style": "success",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_010c1b7d314844b9b564100b85e1fb3b",
            "max": 28881,
            "min": 0,
            "orientation": "horizontal",
            "style": "IPY_MODEL_9a10f3b6ecee4be883d7ebb3236fcf3a",
            "value": 28881
          }
        },
        "3e008ea60cf9437f86aa8a0d70b1f15b": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_23ea50cca7b34042ba8f3439267be912",
            "placeholder": "​",
            "style": "IPY_MODEL_865dd576f3484b18841e83b04dad65b2",
            "value": " 28881/28881 [00:00&lt;00:00, 790986.93it/s]"
          }
        },
        "a3447d082d304f78b5c1125a15dafbc0": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "3df1acb68fb8432d8dc1f67b0331ab48": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "46d18bb77b9848a8baf9355c11de26dd": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "010c1b7d314844b9b564100b85e1fb3b": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "9a10f3b6ecee4be883d7ebb3236fcf3a": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "ProgressStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "ProgressStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "bar_color": null,
            "description_width": ""
          }
        },
        "23ea50cca7b34042ba8f3439267be912": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "865dd576f3484b18841e83b04dad65b2": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "991d258962674689a8db2b209d7f998f": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HBoxModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HBoxModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HBoxView",
            "box_style": "",
            "children": [
              "IPY_MODEL_5bef734aaaa540c494aa75be79305cf4",
              "IPY_MODEL_b3e23d1769fc4b5c8d71c5f59847c1e2",
              "IPY_MODEL_e37b23755b964bebb29c89b7d6b609fc"
            ],
            "layout": "IPY_MODEL_a112c882023d4b438545a8aab2116832"
          }
        },
        "5bef734aaaa540c494aa75be79305cf4": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_04f867f5921342caaeca9fd808c61667",
            "placeholder": "​",
            "style": "IPY_MODEL_29328225f16c4511a505299c64a8bf3c",
            "value": "100%"
          }
        },
        "b3e23d1769fc4b5c8d71c5f59847c1e2": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "FloatProgressModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "FloatProgressModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "ProgressView",
            "bar_style": "success",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_b23c6247a04244b2994ca035a7f3de5e",
            "max": 1648877,
            "min": 0,
            "orientation": "horizontal",
            "style": "IPY_MODEL_56f01392791542a3a251e69a141cd762",
            "value": 1648877
          }
        },
        "e37b23755b964bebb29c89b7d6b609fc": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_65042843852b42c38ad37be8c04ef8b3",
            "placeholder": "​",
            "style": "IPY_MODEL_8b565d78385743c3a6c542fed3003f79",
            "value": " 1648877/1648877 [00:00&lt;00:00, 29784842.04it/s]"
          }
        },
        "a112c882023d4b438545a8aab2116832": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "04f867f5921342caaeca9fd808c61667": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "29328225f16c4511a505299c64a8bf3c": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "b23c6247a04244b2994ca035a7f3de5e": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "56f01392791542a3a251e69a141cd762": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "ProgressStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "ProgressStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "bar_color": null,
            "description_width": ""
          }
        },
        "65042843852b42c38ad37be8c04ef8b3": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "8b565d78385743c3a6c542fed3003f79": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "0c21017473534d2e992353bf94c08f89": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HBoxModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HBoxModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HBoxView",
            "box_style": "",
            "children": [
              "IPY_MODEL_c699c9f26afc494d96ee5c99cb65c1cf",
              "IPY_MODEL_f2d856599dd44d0db5b0011bde432d71",
              "IPY_MODEL_249583a105384745b427735cf9706195"
            ],
            "layout": "IPY_MODEL_4592887d59064578b0bc0bd5ec4214b9"
          }
        },
        "c699c9f26afc494d96ee5c99cb65c1cf": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_ed38d547c4704983adba4741ecd7f3e0",
            "placeholder": "​",
            "style": "IPY_MODEL_e37aa156c2964d7c85eafd1e22948b99",
            "value": "100%"
          }
        },
        "f2d856599dd44d0db5b0011bde432d71": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "FloatProgressModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "FloatProgressModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "ProgressView",
            "bar_style": "success",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_9aa6a7d3d1394c0db93270738e1b0bfb",
            "max": 4542,
            "min": 0,
            "orientation": "horizontal",
            "style": "IPY_MODEL_74ca386a4a454057963f8126df49b5f8",
            "value": 4542
          }
        },
        "249583a105384745b427735cf9706195": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_a96284d623ae42e9bb6e30289f389639",
            "placeholder": "​",
            "style": "IPY_MODEL_6b61af66516e49239cda0be02d3efe62",
            "value": " 4542/4542 [00:00&lt;00:00, 285602.28it/s]"
          }
        },
        "4592887d59064578b0bc0bd5ec4214b9": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "ed38d547c4704983adba4741ecd7f3e0": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "e37aa156c2964d7c85eafd1e22948b99": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "9aa6a7d3d1394c0db93270738e1b0bfb": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "74ca386a4a454057963f8126df49b5f8": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "ProgressStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "ProgressStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "bar_color": null,
            "description_width": ""
          }
        },
        "a96284d623ae42e9bb6e30289f389639": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "6b61af66516e49239cda0be02d3efe62": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "b70ef0201d3e4b298383f434d8c2fb57": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HBoxModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HBoxModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HBoxView",
            "box_style": "",
            "children": [
              "IPY_MODEL_fc0cd1d659784129bac6a566009f5843",
              "IPY_MODEL_eb67b2bf79044103bb493fccafe4d84c",
              "IPY_MODEL_dd9a73b0c2194423aaa2d59367372c62"
            ],
            "layout": "IPY_MODEL_e25933ffaeae47cb91ce74c2fc39ef82"
          }
        },
        "fc0cd1d659784129bac6a566009f5843": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_abc175352a9d4f49808951d5ad314807",
            "placeholder": "​",
            "style": "IPY_MODEL_b34ce37c7bec4593983e59a57343a3c5",
            "value": "Epoch 2: 100%"
          }
        },
        "eb67b2bf79044103bb493fccafe4d84c": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "FloatProgressModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "FloatProgressModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "ProgressView",
            "bar_style": "success",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_1211637661124eaab611980a1bcdefa6",
            "max": 235,
            "min": 0,
            "orientation": "horizontal",
            "style": "IPY_MODEL_b116a4e43a2143c793a873b64d7e7c46",
            "value": 235
          }
        },
        "dd9a73b0c2194423aaa2d59367372c62": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_0e2ebdee143a4c9e8d59866bf5ea78be",
            "placeholder": "​",
            "style": "IPY_MODEL_d57386dc6cb24c6bb6c949d9fc11d90b",
            "value": " 235/235 [00:07&lt;00:00, 33.22it/s, v_num=0]"
          }
        },
        "e25933ffaeae47cb91ce74c2fc39ef82": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": "inline-flex",
            "flex": null,
            "flex_flow": "row wrap",
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": "100%"
          }
        },
        "abc175352a9d4f49808951d5ad314807": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "b34ce37c7bec4593983e59a57343a3c5": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "1211637661124eaab611980a1bcdefa6": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": "2",
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "b116a4e43a2143c793a873b64d7e7c46": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "ProgressStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "ProgressStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "bar_color": null,
            "description_width": ""
          }
        },
        "0e2ebdee143a4c9e8d59866bf5ea78be": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "d57386dc6cb24c6bb6c949d9fc11d90b": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "01ba2ff4948e486ca32efb3f9bb8bcdc": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HBoxModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HBoxModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HBoxView",
            "box_style": "",
            "children": [
              "IPY_MODEL_c44afc7de924484ab5a307ddd1c78896",
              "IPY_MODEL_94c3f0f49ba4435ab1ca4c5d9a58a8ad",
              "IPY_MODEL_f01b48a5493643a3a412f8a3365fd0a8"
            ],
            "layout": "IPY_MODEL_eca1f3f1b441431c9e8dfc858acb1d3c"
          }
        },
        "c44afc7de924484ab5a307ddd1c78896": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_fab5b61ee0b949e2a43f525b17fdbf28",
            "placeholder": "​",
            "style": "IPY_MODEL_c1461b2888684e5fba7de5f678546e71",
            "value": "Sanity Checking DataLoader 0: 100%"
          }
        },
        "94c3f0f49ba4435ab1ca4c5d9a58a8ad": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "FloatProgressModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "FloatProgressModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "ProgressView",
            "bar_style": "",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_faa9506c081149fa90409291a3603e39",
            "max": 2,
            "min": 0,
            "orientation": "horizontal",
            "style": "IPY_MODEL_3cc568c1da9446a983c538af93258856",
            "value": 2
          }
        },
        "f01b48a5493643a3a412f8a3365fd0a8": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_174d035f94014d818d5513fd17f286d3",
            "placeholder": "​",
            "style": "IPY_MODEL_d3cab877a8ae4692975b35176e06488a",
            "value": " 2/2 [00:00&lt;00:00, 13.46it/s]"
          }
        },
        "eca1f3f1b441431c9e8dfc858acb1d3c": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": "inline-flex",
            "flex": null,
            "flex_flow": "row wrap",
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": "hidden",
            "width": "100%"
          }
        },
        "fab5b61ee0b949e2a43f525b17fdbf28": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "c1461b2888684e5fba7de5f678546e71": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "faa9506c081149fa90409291a3603e39": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": "2",
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "3cc568c1da9446a983c538af93258856": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "ProgressStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "ProgressStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "bar_color": null,
            "description_width": ""
          }
        },
        "174d035f94014d818d5513fd17f286d3": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "d3cab877a8ae4692975b35176e06488a": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "94705aaa063649799b6feb6913c48ce3": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HBoxModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HBoxModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HBoxView",
            "box_style": "",
            "children": [
              "IPY_MODEL_42d6584c52514151b073899b4901e099",
              "IPY_MODEL_51c53cbc88184b189e1a820751779db5",
              "IPY_MODEL_623f5a0a9d9a4b41a4f293e8ec4f3275"
            ],
            "layout": "IPY_MODEL_3e70f93cdc164ad596ca5bff3b702266"
          }
        },
        "42d6584c52514151b073899b4901e099": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_4cf1f5aa163749aeb27f56bfa0a7f0ce",
            "placeholder": "​",
            "style": "IPY_MODEL_f32f8c7f47d54b10876a4101576c5d5b",
            "value": "Epoch 2: 100%"
          }
        },
        "51c53cbc88184b189e1a820751779db5": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "FloatProgressModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "FloatProgressModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "ProgressView",
            "bar_style": "success",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_d1d52843a7484ebcab8bca62083891b2",
            "max": 215,
            "min": 0,
            "orientation": "horizontal",
            "style": "IPY_MODEL_c622459172df4ae59d1f67c009293fbe",
            "value": 215
          }
        },
        "623f5a0a9d9a4b41a4f293e8ec4f3275": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_8213707d9dd145d480006f7a0d4c4e76",
            "placeholder": "​",
            "style": "IPY_MODEL_4941235eaa084b8587f99c43521fbc68",
            "value": " 215/215 [00:15&lt;00:00, 14.08it/s, v_num=0, val_loss=0.286, val_acc=0.914]"
          }
        },
        "3e70f93cdc164ad596ca5bff3b702266": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": "inline-flex",
            "flex": null,
            "flex_flow": "row wrap",
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": "100%"
          }
        },
        "4cf1f5aa163749aeb27f56bfa0a7f0ce": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "f32f8c7f47d54b10876a4101576c5d5b": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "d1d52843a7484ebcab8bca62083891b2": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": "2",
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "c622459172df4ae59d1f67c009293fbe": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "ProgressStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "ProgressStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "bar_color": null,
            "description_width": ""
          }
        },
        "8213707d9dd145d480006f7a0d4c4e76": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "4941235eaa084b8587f99c43521fbc68": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "e4e4a6d52fbe4f9b9e01e3b423291880": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HBoxModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HBoxModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HBoxView",
            "box_style": "",
            "children": [
              "IPY_MODEL_7a1b2f3fde8346afac596c6da7878ae3",
              "IPY_MODEL_09327c18946747e791aeb79d9ea5464a",
              "IPY_MODEL_4e71b69bce5e4ff2a03a6f43c4947a31"
            ],
            "layout": "IPY_MODEL_724c36309b234f1aa2acfadd2a50e57e"
          }
        },
        "7a1b2f3fde8346afac596c6da7878ae3": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_955f198227664f44bb24cdb6b8a1a28c",
            "placeholder": "​",
            "style": "IPY_MODEL_ff810c84e7eb4b8ab57a3d7fff5d30c5",
            "value": "Validation DataLoader 0: 100%"
          }
        },
        "09327c18946747e791aeb79d9ea5464a": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "FloatProgressModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "FloatProgressModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "ProgressView",
            "bar_style": "",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_c621fecee87441269645488024c8561e",
            "max": 20,
            "min": 0,
            "orientation": "horizontal",
            "style": "IPY_MODEL_9aee564fde79483e8ddae3c50430c95e",
            "value": 20
          }
        },
        "4e71b69bce5e4ff2a03a6f43c4947a31": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_91ad75563e94496596ea9cd03e3953a1",
            "placeholder": "​",
            "style": "IPY_MODEL_146a870231e74c96b11d4a5e6846405f",
            "value": " 20/20 [00:01&lt;00:00, 13.07it/s]"
          }
        },
        "724c36309b234f1aa2acfadd2a50e57e": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": "inline-flex",
            "flex": null,
            "flex_flow": "row wrap",
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": "hidden",
            "width": "100%"
          }
        },
        "955f198227664f44bb24cdb6b8a1a28c": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "ff810c84e7eb4b8ab57a3d7fff5d30c5": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "c621fecee87441269645488024c8561e": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": "2",
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "9aee564fde79483e8ddae3c50430c95e": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "ProgressStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "ProgressStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "bar_color": null,
            "description_width": ""
          }
        },
        "91ad75563e94496596ea9cd03e3953a1": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "146a870231e74c96b11d4a5e6846405f": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "922b2e6c66d9430682c3ce2e70ed2164": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HBoxModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HBoxModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HBoxView",
            "box_style": "",
            "children": [
              "IPY_MODEL_de905a3128d94c1bb21eaa10b912947e",
              "IPY_MODEL_8198f523dbf549a58554cac72b42db64",
              "IPY_MODEL_8014ddf6ca124ea8b27e7ed04b3f6e72"
            ],
            "layout": "IPY_MODEL_140ae063d36c4574801530464d340b1c"
          }
        },
        "de905a3128d94c1bb21eaa10b912947e": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_9d74744934e644ac90254256175a2fa2",
            "placeholder": "​",
            "style": "IPY_MODEL_bbabec763d004422933d84371dd08585",
            "value": "Validation DataLoader 0: 100%"
          }
        },
        "8198f523dbf549a58554cac72b42db64": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "FloatProgressModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "FloatProgressModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "ProgressView",
            "bar_style": "",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_b01a004f956944ed88ef19d5d4d99c25",
            "max": 20,
            "min": 0,
            "orientation": "horizontal",
            "style": "IPY_MODEL_bc97484f5b334562b559fd7ed4bb34da",
            "value": 20
          }
        },
        "8014ddf6ca124ea8b27e7ed04b3f6e72": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_3862339846cd4cd6ae39a2b23bd5221f",
            "placeholder": "​",
            "style": "IPY_MODEL_8ae80bb5f42c4110a1313eb6a59c46ff",
            "value": " 20/20 [00:01&lt;00:00, 12.42it/s]"
          }
        },
        "140ae063d36c4574801530464d340b1c": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": "inline-flex",
            "flex": null,
            "flex_flow": "row wrap",
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": "hidden",
            "width": "100%"
          }
        },
        "9d74744934e644ac90254256175a2fa2": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "bbabec763d004422933d84371dd08585": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "b01a004f956944ed88ef19d5d4d99c25": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": "2",
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "bc97484f5b334562b559fd7ed4bb34da": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "ProgressStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "ProgressStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "bar_color": null,
            "description_width": ""
          }
        },
        "3862339846cd4cd6ae39a2b23bd5221f": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "8ae80bb5f42c4110a1313eb6a59c46ff": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "a0eb907b1af3422dbdfc92ac3350f0d3": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HBoxModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HBoxModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HBoxView",
            "box_style": "",
            "children": [
              "IPY_MODEL_409fc571393e46f0917119d71c473c45",
              "IPY_MODEL_e14a2d6ee246440797ef6dab0c733996",
              "IPY_MODEL_a7de5d4a797946c6a6af86cd7bc29b1f"
            ],
            "layout": "IPY_MODEL_637437037e3a479da5d6647d0c631cb6"
          }
        },
        "409fc571393e46f0917119d71c473c45": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_f94cabdb384d4c12859f0236a1754177",
            "placeholder": "​",
            "style": "IPY_MODEL_57cdac80602145ff8ab3eb03ffbe2e61",
            "value": "Validation DataLoader 0: 100%"
          }
        },
        "e14a2d6ee246440797ef6dab0c733996": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "FloatProgressModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "FloatProgressModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "ProgressView",
            "bar_style": "",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_7d65e38c9dab4668aceed0abae15e12c",
            "max": 20,
            "min": 0,
            "orientation": "horizontal",
            "style": "IPY_MODEL_db5199bdd9674a67997c545e9f96dd3c",
            "value": 20
          }
        },
        "a7de5d4a797946c6a6af86cd7bc29b1f": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_01833bfce158484a873f4a8ec6bffbc7",
            "placeholder": "​",
            "style": "IPY_MODEL_d31596b6122d437a9dca51708a85d333",
            "value": " 20/20 [00:01&lt;00:00, 10.96it/s]"
          }
        },
        "637437037e3a479da5d6647d0c631cb6": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": "inline-flex",
            "flex": null,
            "flex_flow": "row wrap",
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": "hidden",
            "width": "100%"
          }
        },
        "f94cabdb384d4c12859f0236a1754177": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "57cdac80602145ff8ab3eb03ffbe2e61": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "7d65e38c9dab4668aceed0abae15e12c": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": "2",
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "db5199bdd9674a67997c545e9f96dd3c": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "ProgressStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "ProgressStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "bar_color": null,
            "description_width": ""
          }
        },
        "01833bfce158484a873f4a8ec6bffbc7": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "d31596b6122d437a9dca51708a85d333": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "82ad453aa72d4836b72822f59e4aa1ff": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HBoxModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HBoxModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HBoxView",
            "box_style": "",
            "children": [
              "IPY_MODEL_e1dd3d408c7e4ec0b3ec2e8b3620d326",
              "IPY_MODEL_25842e85e4a1407eb24574966a1f822f",
              "IPY_MODEL_244d42fdd9bb468ea9065a44c686e604"
            ],
            "layout": "IPY_MODEL_6a76750662254e57a24f1239870d75dc"
          }
        },
        "e1dd3d408c7e4ec0b3ec2e8b3620d326": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_377840c190404ea5a3b520940b6da360",
            "placeholder": "​",
            "style": "IPY_MODEL_45fab3608222467f8faa2f341a75dc97",
            "value": "Testing DataLoader 0: 100%"
          }
        },
        "25842e85e4a1407eb24574966a1f822f": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "FloatProgressModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "FloatProgressModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "ProgressView",
            "bar_style": "success",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_3030bdb9b36f45c7b7bd56dfbcef824b",
            "max": 40,
            "min": 0,
            "orientation": "horizontal",
            "style": "IPY_MODEL_d3e2e5d312fa4affbdc92de947a36477",
            "value": 40
          }
        },
        "244d42fdd9bb468ea9065a44c686e604": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_a453b8ac6d2340fa99a36257d11f74cc",
            "placeholder": "​",
            "style": "IPY_MODEL_7f689928d6f1436f925cac8e7fb5e91b",
            "value": " 40/40 [00:02&lt;00:00, 19.05it/s]"
          }
        },
        "6a76750662254e57a24f1239870d75dc": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": "inline-flex",
            "flex": null,
            "flex_flow": "row wrap",
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": "100%"
          }
        },
        "377840c190404ea5a3b520940b6da360": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "45fab3608222467f8faa2f341a75dc97": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "3030bdb9b36f45c7b7bd56dfbcef824b": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": "2",
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "d3e2e5d312fa4affbdc92de947a36477": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "ProgressStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "ProgressStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "bar_color": null,
            "description_width": ""
          }
        },
        "a453b8ac6d2340fa99a36257d11f74cc": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "7f689928d6f1436f925cac8e7fb5e91b": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "e58fa1c912ed47f5b347f1eecc041303": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HBoxModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HBoxModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HBoxView",
            "box_style": "",
            "children": [
              "IPY_MODEL_85d3b53498a64bcfb8e5145595a756a8",
              "IPY_MODEL_3a4eb5edd1b1483fb882e1e28df27268",
              "IPY_MODEL_872e4dadaa7242bf81289f9331edf62d"
            ],
            "layout": "IPY_MODEL_1d13faa88d36470eb6dc97f2c2088a50"
          }
        },
        "85d3b53498a64bcfb8e5145595a756a8": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_e432a9d0cffe4045983b0b45b3d3ef47",
            "placeholder": "​",
            "style": "IPY_MODEL_2c816b27b28b47beacde528ac3eedeae",
            "value": "Sanity Checking DataLoader 0: 100%"
          }
        },
        "3a4eb5edd1b1483fb882e1e28df27268": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "FloatProgressModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "FloatProgressModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "ProgressView",
            "bar_style": "",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_233509d8cf4e455094de5861ddba90ea",
            "max": 2,
            "min": 0,
            "orientation": "horizontal",
            "style": "IPY_MODEL_d4fae7ae19df43f6855c94acaf8d28c7",
            "value": 2
          }
        },
        "872e4dadaa7242bf81289f9331edf62d": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_081a40d1db1746339698f55d6958d3e9",
            "placeholder": "​",
            "style": "IPY_MODEL_a105bc669ea045a4af6a725b457c8711",
            "value": " 2/2 [00:00&lt;00:00, 31.30it/s]"
          }
        },
        "1d13faa88d36470eb6dc97f2c2088a50": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": "inline-flex",
            "flex": null,
            "flex_flow": "row wrap",
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": "hidden",
            "width": "100%"
          }
        },
        "e432a9d0cffe4045983b0b45b3d3ef47": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "2c816b27b28b47beacde528ac3eedeae": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "233509d8cf4e455094de5861ddba90ea": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": "2",
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "d4fae7ae19df43f6855c94acaf8d28c7": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "ProgressStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "ProgressStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "bar_color": null,
            "description_width": ""
          }
        },
        "081a40d1db1746339698f55d6958d3e9": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "a105bc669ea045a4af6a725b457c8711": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "873635b03afd4548b5d8299132400e25": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HBoxModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HBoxModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HBoxView",
            "box_style": "",
            "children": [
              "IPY_MODEL_56a317f4269240388be8556afea74c5c",
              "IPY_MODEL_9dfd51f18e5b4528b966fb70e6f0f14a",
              "IPY_MODEL_94211de1bdf84c599b3b6da9a3edaa56"
            ],
            "layout": "IPY_MODEL_090016de310646429d3dc4ee465c5b22"
          }
        },
        "56a317f4269240388be8556afea74c5c": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_63a3b9beebd04ff18ac218d03a3e524b",
            "placeholder": "​",
            "style": "IPY_MODEL_4ca6c373bff44417b169cad04b6677c1",
            "value": "Epoch 0: 100%"
          }
        },
        "9dfd51f18e5b4528b966fb70e6f0f14a": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "FloatProgressModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "FloatProgressModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "ProgressView",
            "bar_style": "success",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_2abfaeadd5964520b0ffd39ab8c573f1",
            "max": 100,
            "min": 0,
            "orientation": "horizontal",
            "style": "IPY_MODEL_ee5a04fefeeb4bb1821f8e9172ba4cfc",
            "value": 100
          }
        },
        "94211de1bdf84c599b3b6da9a3edaa56": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_afdfd0152e3c4b20ac676e35bc65dbdc",
            "placeholder": "​",
            "style": "IPY_MODEL_6d33919b51d747eaa6bfef09451a816d",
            "value": " 100/100 [00:00&lt;00:00, 243.81it/s, v_num=1]"
          }
        },
        "090016de310646429d3dc4ee465c5b22": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": "inline-flex",
            "flex": null,
            "flex_flow": "row wrap",
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": "100%"
          }
        },
        "63a3b9beebd04ff18ac218d03a3e524b": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "4ca6c373bff44417b169cad04b6677c1": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "2abfaeadd5964520b0ffd39ab8c573f1": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": "2",
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "ee5a04fefeeb4bb1821f8e9172ba4cfc": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "ProgressStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "ProgressStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "bar_color": null,
            "description_width": ""
          }
        },
        "afdfd0152e3c4b20ac676e35bc65dbdc": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "6d33919b51d747eaa6bfef09451a816d": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        }
      }
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "view-in-github",
        "colab_type": "text"
      },
      "source": [
        "<a href=\"https://colab.research.google.com/github/chenyu313/Colaboratory_note/blob/main/pytorch_lightning%E5%85%A5%E9%97%A8.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "## 环境"
      ],
      "metadata": {
        "id": "C9WvpZ5lkXIv"
      }
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "CsFlEkpjjx90"
      },
      "outputs": [],
      "source": [
        "! pip install --quiet \"seaborn\" \"pytorch-lightning>=1.4, <2.0.0\" \"torchvision\" \"setuptools==67.4.0\" \"lightning>=2.0.0rc0\" \"ipython[notebook]==7.9.0\" \"pandas\" \"torchmetrics >=0.11.0\" \"torch>=1.8.1, <1.14.0\" \"torchmetrics>=0.7, <0.12\""
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "import os\n",
        "\n",
        "import lightning as L\n",
        "import pandas as pd\n",
        "import seaborn as sn\n",
        "import torch\n",
        "from IPython.display import display\n",
        "from lightning.pytorch.loggers import CSVLogger\n",
        "from torch import nn\n",
        "from torch.nn import functional as F\n",
        "from torch.utils.data import DataLoader, random_split\n",
        "from torchmetrics import Accuracy\n",
        "from torchvision import transforms\n",
        "from torchvision.datasets import MNIST\n",
        "\n",
        "PATH_DATASETS = os.environ.get(\"PATH_DATASETS\", \".\")\n",
        "BATCH_SIZE = 256 if torch.cuda.is_available() else 64"
      ],
      "metadata": {
        "id": "i-MuVgPalQUv"
      },
      "execution_count": 2,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "## 一个简单的例子\n",
        "这里有一个最简单的例子，只有一个训练循环(没有验证，没有测试)。"
      ],
      "metadata": {
        "id": "4ohFBkE6lWx2"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "class MNISTModel(L.LightningModule):\n",
        "  def __init__(self):\n",
        "    #初始化\n",
        "    super().__init__()\n",
        "    self.l1=torch.nn.Linear(28*28,10)\n",
        "  \n",
        "  def forward(self,x):\n",
        "    #前向传播\n",
        "    return torch.relu(self.l1(x.view(x.size(0),-1)))\n",
        "\n",
        "  def training_step(self,batch,batch_nb):\n",
        "    #训练\n",
        "    x,y=batch\n",
        "    loss=F.cross_entropy(self(x),y)\n",
        "\n",
        "  def configure_optimizers(self):\n",
        "    #优化器\n",
        "    return torch.optim.Adam(self.parameters(),lr=0.02)\n",
        "  \n"
      ],
      "metadata": {
        "id": "X5UCVN02ljp_"
      },
      "execution_count": 3,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "通过使用Trainer将自动获得：  \n",
        "* 张量日志\n",
        "* 模型检查点\n",
        "* 训练和验证循环\n",
        "* 早停"
      ],
      "metadata": {
        "id": "HkSqPZLpoVIg"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "#初始化模型\n",
        "mnist_model=MNISTModel()\n",
        "#从数据集中获取数据\n",
        "train_ds=MNIST(PATH_DATASETS,train=True, download=True, transform=transforms.ToTensor())\n",
        "train_loader=DataLoader(train_ds,BATCH_SIZE)\n",
        "\n",
        "#初始化训练器\n",
        "trainer=L.Trainer(\n",
        "    accelerator=\"auto\",\n",
        "    devices=1,\n",
        "    max_epochs=3\n",
        ")\n",
        "# 开始训练模型 ⚡\n",
        "trainer.fit(mnist_model, train_loader)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000,
          "referenced_widgets": [
            "6236e2d615a44408962f3ba91248239e",
            "1f7210b64c374af28232afc438237e32",
            "94795d9327d044c8b4fe41d7f4f0f6b1",
            "0b75b8fc1418412383527588804d92d0",
            "05e0ea1fc29640ab80b01ac14fb378b7",
            "8e286499ba3541c6962e1bc7ac907d38",
            "c867464a923f4ac7a17500f7ac1eed18",
            "b04574144aa74f4791f0fa0631f5714a",
            "c3852df99fc544cba7c75f2afe48b972",
            "328f7ec5662a43dfbca33e4fe8c30829",
            "6cd905900e5445988f93b90bc376ebfd",
            "5ef4ab5857c94034a28916341c952d42",
            "e93183366c7d4059bb5cc2c458abb3a5",
            "8f2fffb4d802454c9cf5b54f40e91a79",
            "3e008ea60cf9437f86aa8a0d70b1f15b",
            "a3447d082d304f78b5c1125a15dafbc0",
            "3df1acb68fb8432d8dc1f67b0331ab48",
            "46d18bb77b9848a8baf9355c11de26dd",
            "010c1b7d314844b9b564100b85e1fb3b",
            "9a10f3b6ecee4be883d7ebb3236fcf3a",
            "23ea50cca7b34042ba8f3439267be912",
            "865dd576f3484b18841e83b04dad65b2",
            "991d258962674689a8db2b209d7f998f",
            "5bef734aaaa540c494aa75be79305cf4",
            "b3e23d1769fc4b5c8d71c5f59847c1e2",
            "e37b23755b964bebb29c89b7d6b609fc",
            "a112c882023d4b438545a8aab2116832",
            "04f867f5921342caaeca9fd808c61667",
            "29328225f16c4511a505299c64a8bf3c",
            "b23c6247a04244b2994ca035a7f3de5e",
            "56f01392791542a3a251e69a141cd762",
            "65042843852b42c38ad37be8c04ef8b3",
            "8b565d78385743c3a6c542fed3003f79",
            "0c21017473534d2e992353bf94c08f89",
            "c699c9f26afc494d96ee5c99cb65c1cf",
            "f2d856599dd44d0db5b0011bde432d71",
            "249583a105384745b427735cf9706195",
            "4592887d59064578b0bc0bd5ec4214b9",
            "ed38d547c4704983adba4741ecd7f3e0",
            "e37aa156c2964d7c85eafd1e22948b99",
            "9aa6a7d3d1394c0db93270738e1b0bfb",
            "74ca386a4a454057963f8126df49b5f8",
            "a96284d623ae42e9bb6e30289f389639",
            "6b61af66516e49239cda0be02d3efe62",
            "b70ef0201d3e4b298383f434d8c2fb57",
            "fc0cd1d659784129bac6a566009f5843",
            "eb67b2bf79044103bb493fccafe4d84c",
            "dd9a73b0c2194423aaa2d59367372c62",
            "e25933ffaeae47cb91ce74c2fc39ef82",
            "abc175352a9d4f49808951d5ad314807",
            "b34ce37c7bec4593983e59a57343a3c5",
            "1211637661124eaab611980a1bcdefa6",
            "b116a4e43a2143c793a873b64d7e7c46",
            "0e2ebdee143a4c9e8d59866bf5ea78be",
            "d57386dc6cb24c6bb6c949d9fc11d90b"
          ]
        },
        "id": "UXOVmHkdod5A",
        "outputId": "0283507d-2a7b-4e63-c37e-176bfd50af15"
      },
      "execution_count": 4,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz\n",
            "Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz to ./MNIST/raw/train-images-idx3-ubyte.gz\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "  0%|          | 0/9912422 [00:00<?, ?it/s]"
            ],
            "application/vnd.jupyter.widget-view+json": {
              "version_major": 2,
              "version_minor": 0,
              "model_id": "6236e2d615a44408962f3ba91248239e"
            }
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Extracting ./MNIST/raw/train-images-idx3-ubyte.gz to ./MNIST/raw\n",
            "\n",
            "Downloading http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz\n",
            "Downloading http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz to ./MNIST/raw/train-labels-idx1-ubyte.gz\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "  0%|          | 0/28881 [00:00<?, ?it/s]"
            ],
            "application/vnd.jupyter.widget-view+json": {
              "version_major": 2,
              "version_minor": 0,
              "model_id": "5ef4ab5857c94034a28916341c952d42"
            }
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Extracting ./MNIST/raw/train-labels-idx1-ubyte.gz to ./MNIST/raw\n",
            "\n",
            "Downloading http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz\n",
            "Downloading http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz to ./MNIST/raw/t10k-images-idx3-ubyte.gz\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "  0%|          | 0/1648877 [00:00<?, ?it/s]"
            ],
            "application/vnd.jupyter.widget-view+json": {
              "version_major": 2,
              "version_minor": 0,
              "model_id": "991d258962674689a8db2b209d7f998f"
            }
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Extracting ./MNIST/raw/t10k-images-idx3-ubyte.gz to ./MNIST/raw\n",
            "\n",
            "Downloading http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz\n",
            "Downloading http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz to ./MNIST/raw/t10k-labels-idx1-ubyte.gz\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "  0%|          | 0/4542 [00:00<?, ?it/s]"
            ],
            "application/vnd.jupyter.widget-view+json": {
              "version_major": 2,
              "version_minor": 0,
              "model_id": "0c21017473534d2e992353bf94c08f89"
            }
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Extracting ./MNIST/raw/t10k-labels-idx1-ubyte.gz to ./MNIST/raw\n",
            "\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "INFO: GPU available: True (cuda), used: True\n",
            "INFO:lightning.pytorch.utilities.rank_zero:GPU available: True (cuda), used: True\n",
            "INFO: TPU available: False, using: 0 TPU cores\n",
            "INFO:lightning.pytorch.utilities.rank_zero:TPU available: False, using: 0 TPU cores\n",
            "INFO: IPU available: False, using: 0 IPUs\n",
            "INFO:lightning.pytorch.utilities.rank_zero:IPU available: False, using: 0 IPUs\n",
            "INFO: HPU available: False, using: 0 HPUs\n",
            "INFO:lightning.pytorch.utilities.rank_zero:HPU available: False, using: 0 HPUs\n",
            "WARNING: Missing logger folder: /content/lightning_logs\n",
            "WARNING:lightning.pytorch.loggers.tensorboard:Missing logger folder: /content/lightning_logs\n",
            "INFO: LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0]\n",
            "INFO:lightning.pytorch.accelerators.cuda:LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0]\n",
            "INFO: \n",
            "  | Name | Type   | Params\n",
            "--------------------------------\n",
            "0 | l1   | Linear | 7.9 K \n",
            "--------------------------------\n",
            "7.9 K     Trainable params\n",
            "0         Non-trainable params\n",
            "7.9 K     Total params\n",
            "0.031     Total estimated model params size (MB)\n",
            "INFO:lightning.pytorch.callbacks.model_summary:\n",
            "  | Name | Type   | Params\n",
            "--------------------------------\n",
            "0 | l1   | Linear | 7.9 K \n",
            "--------------------------------\n",
            "7.9 K     Trainable params\n",
            "0         Non-trainable params\n",
            "7.9 K     Total params\n",
            "0.031     Total estimated model params size (MB)\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "Training: 0it [00:00, ?it/s]"
            ],
            "application/vnd.jupyter.widget-view+json": {
              "version_major": 2,
              "version_minor": 0,
              "model_id": "b70ef0201d3e4b298383f434d8c2fb57"
            }
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "/usr/local/lib/python3.9/dist-packages/lightning/pytorch/loops/optimization/automatic.py:129: UserWarning: `training_step` returned `None`. If this was on purpose, ignore this warning...\n",
            "  self.warning_cache.warn(\"`training_step` returned `None`. If this was on purpose, ignore this warning...\")\n",
            "INFO: `Trainer.fit` stopped: `max_epochs=3` reached.\n",
            "INFO:lightning.pytorch.utilities.rank_zero:`Trainer.fit` stopped: `max_epochs=3` reached.\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "## 一个更完整的MNIST闪电模块示例\n",
        "注意以下函数在做什么：\n",
        "* prepare_data() \n",
        "  * 我们可以从这里下载数据集。我们指向我们想要的数据集，并要求torchvision的MNIST数据集类下载，如果数据集没有找到那里。\n",
        "  * 注意，我们没有在这个函数中进行任何状态赋值(即self.something=…)\n",
        "\n",
        "* setup(stage) \n",
        "  * 从文件中加载数据，并为每个批量(train, val, test)准备PyTorch张量数据集。\n",
        "  * setup程序需要一个“stage”参数，用于分离“fit”和“test”的逻辑。\n",
        "  * 如果你不介意一次加载所有的数据集，你可以设置一个条件，允许“fit”相关的设置和“test”相关的设置在None传递到阶段时运行(或者完全忽略它并排除任何条件)。\n",
        "  * 注意，这是在所有gpu上运行的，在这里进行状态分配是安全的\n",
        "\n",
        "* x_dataloader()\n",
        "  * train_dataloader()， val_dataloader()和test_dataloader()都返回PyTorch DataLoader实例，这些实例是通过包装我们在setup()中准备的各自的数据集创建的。"
      ],
      "metadata": {
        "id": "NqOOwYMLF9TM"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "class LitMNIST(L.LightningModule):\n",
        "  #⚡闪电模型\n",
        "    def __init__(self, data_dir=PATH_DATASETS, hidden_size=64, learning_rate=2e-4):\n",
        "        super().__init__()\n",
        "\n",
        "        # 将初始化参数设置为类属性\n",
        "        self.data_dir = data_dir\n",
        "        self.hidden_size = hidden_size\n",
        "        self.learning_rate = learning_rate\n",
        "\n",
        "        # 硬编码一些数据集特定的属性\n",
        "        self.num_classes = 10\n",
        "        self.dims = (1, 28, 28)\n",
        "        channels, width, height = self.dims\n",
        "        self.transform = transforms.Compose(\n",
        "            [\n",
        "                transforms.ToTensor(),\n",
        "                transforms.Normalize((0.1307,), (0.3081,)),\n",
        "            ]\n",
        "        )\n",
        "\n",
        "        # 定义PyTorch模型\n",
        "        self.model = nn.Sequential(\n",
        "            nn.Flatten(), #展开\n",
        "            nn.Linear(channels * width * height, hidden_size),\n",
        "            nn.ReLU(),  #激活函数\n",
        "            nn.Dropout(0.1), #暂退法，防止过拟合\n",
        "            nn.Linear(hidden_size, hidden_size), #隐藏层\n",
        "            nn.ReLU(),\n",
        "            nn.Dropout(0.1),\n",
        "            nn.Linear(hidden_size, self.num_classes),\n",
        "        )\n",
        "\n",
        "        self.val_accuracy = Accuracy(task=\"multiclass\", num_classes=10)\n",
        "        self.test_accuracy = Accuracy(task=\"multiclass\", num_classes=10)\n",
        "\n",
        "    def forward(self, x):\n",
        "        x = self.model(x)\n",
        "        return F.log_softmax(x, dim=1)\n",
        "\n",
        "    def training_step(self, batch, batch_idx):\n",
        "        x, y = batch\n",
        "        logits = self(x)\n",
        "        loss = F.nll_loss(logits, y)\n",
        "        return loss\n",
        "\n",
        "    def validation_step(self, batch, batch_idx):\n",
        "        x, y = batch\n",
        "        logits = self(x)\n",
        "        loss = F.nll_loss(logits, y)\n",
        "        preds = torch.argmax(logits, dim=1)\n",
        "        self.val_accuracy.update(preds, y)\n",
        "\n",
        "        # 调用self.log将为你在TensorBoard中显示标量\n",
        "        self.log(\"val_loss\", loss, prog_bar=True)\n",
        "        self.log(\"val_acc\", self.val_accuracy, prog_bar=True)\n",
        "\n",
        "    def test_step(self, batch, batch_idx):\n",
        "        x, y = batch\n",
        "        logits = self(x)\n",
        "        loss = F.nll_loss(logits, y)\n",
        "        preds = torch.argmax(logits, dim=1)\n",
        "        self.test_accuracy.update(preds, y)\n",
        "\n",
        "        # 调用self.log将为你在TensorBoard中显示标量\n",
        "        self.log(\"test_loss\", loss, prog_bar=True)\n",
        "        self.log(\"test_acc\", self.test_accuracy, prog_bar=True)\n",
        "\n",
        "    def configure_optimizers(self):\n",
        "        optimizer = torch.optim.Adam(self.parameters(), lr=self.learning_rate)\n",
        "        return optimizer\n",
        "\n",
        "    ####################\n",
        "    # DATA RELATED HOOKS\n",
        "    ####################\n",
        "\n",
        "    def prepare_data(self):\n",
        "        # 下载\n",
        "        MNIST(self.data_dir, train=True, download=True)\n",
        "        MNIST(self.data_dir, train=False, download=True)\n",
        "\n",
        "    def setup(self, stage=None):\n",
        "        # 为数据加载器分配train/val数据集\n",
        "        if stage == \"fit\" or stage is None:\n",
        "            mnist_full = MNIST(self.data_dir, train=True, transform=self.transform)\n",
        "            self.mnist_train, self.mnist_val = random_split(mnist_full, [55000, 5000])\n",
        "\n",
        "        # 为数据加载器分配test数据集\n",
        "        if stage == \"test\" or stage is None:\n",
        "            self.mnist_test = MNIST(self.data_dir, train=False, transform=self.transform)\n",
        "\n",
        "    def train_dataloader(self):\n",
        "        return DataLoader(self.mnist_train, batch_size=BATCH_SIZE)\n",
        "\n",
        "    def val_dataloader(self):\n",
        "        return DataLoader(self.mnist_val, batch_size=BATCH_SIZE)\n",
        "\n",
        "    def test_dataloader(self):\n",
        "        return DataLoader(self.mnist_test, batch_size=BATCH_SIZE)"
      ],
      "metadata": {
        "id": "mhal1HjlF0sV"
      },
      "execution_count": 5,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# 开始训练\n",
        "model = LitMNIST()\n",
        "trainer = L.Trainer(\n",
        "    accelerator=\"auto\",\n",
        "    devices=1,\n",
        "    max_epochs=3,\n",
        "    logger=CSVLogger(save_dir=\"logs/\"),\n",
        ")\n",
        "trainer.fit(model)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 710,
          "referenced_widgets": [
            "01ba2ff4948e486ca32efb3f9bb8bcdc",
            "c44afc7de924484ab5a307ddd1c78896",
            "94c3f0f49ba4435ab1ca4c5d9a58a8ad",
            "f01b48a5493643a3a412f8a3365fd0a8",
            "eca1f3f1b441431c9e8dfc858acb1d3c",
            "fab5b61ee0b949e2a43f525b17fdbf28",
            "c1461b2888684e5fba7de5f678546e71",
            "faa9506c081149fa90409291a3603e39",
            "3cc568c1da9446a983c538af93258856",
            "174d035f94014d818d5513fd17f286d3",
            "d3cab877a8ae4692975b35176e06488a",
            "94705aaa063649799b6feb6913c48ce3",
            "42d6584c52514151b073899b4901e099",
            "51c53cbc88184b189e1a820751779db5",
            "623f5a0a9d9a4b41a4f293e8ec4f3275",
            "3e70f93cdc164ad596ca5bff3b702266",
            "4cf1f5aa163749aeb27f56bfa0a7f0ce",
            "f32f8c7f47d54b10876a4101576c5d5b",
            "d1d52843a7484ebcab8bca62083891b2",
            "c622459172df4ae59d1f67c009293fbe",
            "8213707d9dd145d480006f7a0d4c4e76",
            "4941235eaa084b8587f99c43521fbc68",
            "e4e4a6d52fbe4f9b9e01e3b423291880",
            "7a1b2f3fde8346afac596c6da7878ae3",
            "09327c18946747e791aeb79d9ea5464a",
            "4e71b69bce5e4ff2a03a6f43c4947a31",
            "724c36309b234f1aa2acfadd2a50e57e",
            "955f198227664f44bb24cdb6b8a1a28c",
            "ff810c84e7eb4b8ab57a3d7fff5d30c5",
            "c621fecee87441269645488024c8561e",
            "9aee564fde79483e8ddae3c50430c95e",
            "91ad75563e94496596ea9cd03e3953a1",
            "146a870231e74c96b11d4a5e6846405f",
            "922b2e6c66d9430682c3ce2e70ed2164",
            "de905a3128d94c1bb21eaa10b912947e",
            "8198f523dbf549a58554cac72b42db64",
            "8014ddf6ca124ea8b27e7ed04b3f6e72",
            "140ae063d36c4574801530464d340b1c",
            "9d74744934e644ac90254256175a2fa2",
            "bbabec763d004422933d84371dd08585",
            "b01a004f956944ed88ef19d5d4d99c25",
            "bc97484f5b334562b559fd7ed4bb34da",
            "3862339846cd4cd6ae39a2b23bd5221f",
            "8ae80bb5f42c4110a1313eb6a59c46ff",
            "a0eb907b1af3422dbdfc92ac3350f0d3",
            "409fc571393e46f0917119d71c473c45",
            "e14a2d6ee246440797ef6dab0c733996",
            "a7de5d4a797946c6a6af86cd7bc29b1f",
            "637437037e3a479da5d6647d0c631cb6",
            "f94cabdb384d4c12859f0236a1754177",
            "57cdac80602145ff8ab3eb03ffbe2e61",
            "7d65e38c9dab4668aceed0abae15e12c",
            "db5199bdd9674a67997c545e9f96dd3c",
            "01833bfce158484a873f4a8ec6bffbc7",
            "d31596b6122d437a9dca51708a85d333"
          ]
        },
        "id": "kh5fepEMKslP",
        "outputId": "5b0c02b9-3f76-431b-f51a-6c0c0932e1bc"
      },
      "execution_count": 6,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "INFO: GPU available: True (cuda), used: True\n",
            "INFO:lightning.pytorch.utilities.rank_zero:GPU available: True (cuda), used: True\n",
            "INFO: TPU available: False, using: 0 TPU cores\n",
            "INFO:lightning.pytorch.utilities.rank_zero:TPU available: False, using: 0 TPU cores\n",
            "INFO: IPU available: False, using: 0 IPUs\n",
            "INFO:lightning.pytorch.utilities.rank_zero:IPU available: False, using: 0 IPUs\n",
            "INFO: HPU available: False, using: 0 HPUs\n",
            "INFO:lightning.pytorch.utilities.rank_zero:HPU available: False, using: 0 HPUs\n",
            "WARNING: Missing logger folder: logs/lightning_logs\n",
            "WARNING:lightning.fabric.loggers.csv_logs:Missing logger folder: logs/lightning_logs\n",
            "INFO: LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0]\n",
            "INFO:lightning.pytorch.accelerators.cuda:LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0]\n",
            "INFO: \n",
            "  | Name          | Type               | Params\n",
            "-----------------------------------------------------\n",
            "0 | model         | Sequential         | 55.1 K\n",
            "1 | val_accuracy  | MulticlassAccuracy | 0     \n",
            "2 | test_accuracy | MulticlassAccuracy | 0     \n",
            "-----------------------------------------------------\n",
            "55.1 K    Trainable params\n",
            "0         Non-trainable params\n",
            "55.1 K    Total params\n",
            "0.220     Total estimated model params size (MB)\n",
            "INFO:lightning.pytorch.callbacks.model_summary:\n",
            "  | Name          | Type               | Params\n",
            "-----------------------------------------------------\n",
            "0 | model         | Sequential         | 55.1 K\n",
            "1 | val_accuracy  | MulticlassAccuracy | 0     \n",
            "2 | test_accuracy | MulticlassAccuracy | 0     \n",
            "-----------------------------------------------------\n",
            "55.1 K    Trainable params\n",
            "0         Non-trainable params\n",
            "55.1 K    Total params\n",
            "0.220     Total estimated model params size (MB)\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "Sanity Checking: 0it [00:00, ?it/s]"
            ],
            "application/vnd.jupyter.widget-view+json": {
              "version_major": 2,
              "version_minor": 0,
              "model_id": "01ba2ff4948e486ca32efb3f9bb8bcdc"
            }
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "Training: 0it [00:00, ?it/s]"
            ],
            "application/vnd.jupyter.widget-view+json": {
              "version_major": 2,
              "version_minor": 0,
              "model_id": "94705aaa063649799b6feb6913c48ce3"
            }
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "Validation: 0it [00:00, ?it/s]"
            ],
            "application/vnd.jupyter.widget-view+json": {
              "version_major": 2,
              "version_minor": 0,
              "model_id": "e4e4a6d52fbe4f9b9e01e3b423291880"
            }
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "Validation: 0it [00:00, ?it/s]"
            ],
            "application/vnd.jupyter.widget-view+json": {
              "version_major": 2,
              "version_minor": 0,
              "model_id": "922b2e6c66d9430682c3ce2e70ed2164"
            }
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "Validation: 0it [00:00, ?it/s]"
            ],
            "application/vnd.jupyter.widget-view+json": {
              "version_major": 2,
              "version_minor": 0,
              "model_id": "a0eb907b1af3422dbdfc92ac3350f0d3"
            }
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "INFO: `Trainer.fit` stopped: `max_epochs=3` reached.\n",
            "INFO:lightning.pytorch.utilities.rank_zero:`Trainer.fit` stopped: `max_epochs=3` reached.\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "## 测试\n",
        "如果你刚刚训练了一个模型，你可以调用trainer.test()， Lightning会自动使用保存最好的检查点(以val_loss为条件)进行测试。"
      ],
      "metadata": {
        "id": "WOq8_etPLOlG"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "trainer.test()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 336,
          "referenced_widgets": [
            "82ad453aa72d4836b72822f59e4aa1ff",
            "e1dd3d408c7e4ec0b3ec2e8b3620d326",
            "25842e85e4a1407eb24574966a1f822f",
            "244d42fdd9bb468ea9065a44c686e604",
            "6a76750662254e57a24f1239870d75dc",
            "377840c190404ea5a3b520940b6da360",
            "45fab3608222467f8faa2f341a75dc97",
            "3030bdb9b36f45c7b7bd56dfbcef824b",
            "d3e2e5d312fa4affbdc92de947a36477",
            "a453b8ac6d2340fa99a36257d11f74cc",
            "7f689928d6f1436f925cac8e7fb5e91b"
          ]
        },
        "id": "jqBLTYCSLVBG",
        "outputId": "2b665e5b-e90c-4f80-80cd-957cf4de0661"
      },
      "execution_count": 7,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "/usr/local/lib/python3.9/dist-packages/lightning/pytorch/trainer/connectors/checkpoint_connector.py:148: UserWarning: `.test(ckpt_path=None)` was called without a model. The best model of the previous `fit` call will be used. You can pass `.test(ckpt_path='best')` to use the best model or `.test(ckpt_path='last')` to use the last model. If you pass a value, this warning will be silenced.\n",
            "  rank_zero_warn(\n",
            "INFO: Restoring states from the checkpoint path at logs/lightning_logs/version_0/checkpoints/epoch=2-step=645.ckpt\n",
            "INFO:lightning.pytorch.utilities.rank_zero:Restoring states from the checkpoint path at logs/lightning_logs/version_0/checkpoints/epoch=2-step=645.ckpt\n",
            "INFO: LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0]\n",
            "INFO:lightning.pytorch.accelerators.cuda:LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0]\n",
            "INFO: Loaded model weights from the checkpoint at logs/lightning_logs/version_0/checkpoints/epoch=2-step=645.ckpt\n",
            "INFO:lightning.pytorch.utilities.rank_zero:Loaded model weights from the checkpoint at logs/lightning_logs/version_0/checkpoints/epoch=2-step=645.ckpt\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "Testing: 0it [00:00, ?it/s]"
            ],
            "application/vnd.jupyter.widget-view+json": {
              "version_major": 2,
              "version_minor": 0,
              "model_id": "82ad453aa72d4836b72822f59e4aa1ff"
            }
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
              "┃\u001b[1m \u001b[0m\u001b[1m       Test metric       \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m      DataLoader 0       \u001b[0m\u001b[1m \u001b[0m┃\n",
              "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
              "│\u001b[36m \u001b[0m\u001b[36m        test_acc         \u001b[0m\u001b[36m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m   0.9235000014305115    \u001b[0m\u001b[35m \u001b[0m│\n",
              "│\u001b[36m \u001b[0m\u001b[36m        test_loss        \u001b[0m\u001b[36m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m   0.2555736303329468    \u001b[0m\u001b[35m \u001b[0m│\n",
              "└───────────────────────────┴───────────────────────────┘\n"
            ],
            "text/html": [
              "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
              "┃<span style=\"font-weight: bold\">        Test metric        </span>┃<span style=\"font-weight: bold\">       DataLoader 0        </span>┃\n",
              "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
              "│<span style=\"color: #008080; text-decoration-color: #008080\">         test_acc          </span>│<span style=\"color: #800080; text-decoration-color: #800080\">    0.9235000014305115     </span>│\n",
              "│<span style=\"color: #008080; text-decoration-color: #008080\">         test_loss         </span>│<span style=\"color: #800080; text-decoration-color: #800080\">    0.2555736303329468     </span>│\n",
              "└───────────────────────────┴───────────────────────────┘\n",
              "</pre>\n"
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "[{'test_loss': 0.2555736303329468, 'test_acc': 0.9235000014305115}]"
            ]
          },
          "metadata": {},
          "execution_count": 7
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "## 一些建议\n",
        "您可以继续调用trainer.fit(model)多次，只要您想继续训练"
      ],
      "metadata": {
        "id": "w-WmfUwtLpSP"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "trainer.fit(model)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 551,
          "referenced_widgets": [
            "e58fa1c912ed47f5b347f1eecc041303",
            "85d3b53498a64bcfb8e5145595a756a8",
            "3a4eb5edd1b1483fb882e1e28df27268",
            "872e4dadaa7242bf81289f9331edf62d",
            "1d13faa88d36470eb6dc97f2c2088a50",
            "e432a9d0cffe4045983b0b45b3d3ef47",
            "2c816b27b28b47beacde528ac3eedeae",
            "233509d8cf4e455094de5861ddba90ea",
            "d4fae7ae19df43f6855c94acaf8d28c7",
            "081a40d1db1746339698f55d6958d3e9",
            "a105bc669ea045a4af6a725b457c8711"
          ]
        },
        "id": "8WYt90kxLvev",
        "outputId": "ef0dbbca-8aff-449a-e48d-f2b8805779c4"
      },
      "execution_count": 8,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "/usr/local/lib/python3.9/dist-packages/lightning/pytorch/callbacks/model_checkpoint.py:612: UserWarning: Checkpoint directory logs/lightning_logs/version_0/checkpoints exists and is not empty.\n",
            "  rank_zero_warn(f\"Checkpoint directory {dirpath} exists and is not empty.\")\n",
            "INFO: LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0]\n",
            "INFO:lightning.pytorch.accelerators.cuda:LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0]\n",
            "INFO: \n",
            "  | Name          | Type               | Params\n",
            "-----------------------------------------------------\n",
            "0 | model         | Sequential         | 55.1 K\n",
            "1 | val_accuracy  | MulticlassAccuracy | 0     \n",
            "2 | test_accuracy | MulticlassAccuracy | 0     \n",
            "-----------------------------------------------------\n",
            "55.1 K    Trainable params\n",
            "0         Non-trainable params\n",
            "55.1 K    Total params\n",
            "0.220     Total estimated model params size (MB)\n",
            "INFO:lightning.pytorch.callbacks.model_summary:\n",
            "  | Name          | Type               | Params\n",
            "-----------------------------------------------------\n",
            "0 | model         | Sequential         | 55.1 K\n",
            "1 | val_accuracy  | MulticlassAccuracy | 0     \n",
            "2 | test_accuracy | MulticlassAccuracy | 0     \n",
            "-----------------------------------------------------\n",
            "55.1 K    Trainable params\n",
            "0         Non-trainable params\n",
            "55.1 K    Total params\n",
            "0.220     Total estimated model params size (MB)\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "Sanity Checking: 0it [00:00, ?it/s]"
            ],
            "application/vnd.jupyter.widget-view+json": {
              "version_major": 2,
              "version_minor": 0,
              "model_id": "e58fa1c912ed47f5b347f1eecc041303"
            }
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "INFO: `Trainer.fit` stopped: `max_epochs=3` reached.\n",
            "INFO:lightning.pytorch.utilities.rank_zero:`Trainer.fit` stopped: `max_epochs=3` reached.\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "在Colab中，你可以使用TensorBoard神奇的功能来查看Lightning为你创建的日志!"
      ],
      "metadata": {
        "id": "gD-pHwjlL-Bn"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "metrics = pd.read_csv(f\"{trainer.logger.log_dir}/metrics.csv\")\n",
        "del metrics[\"step\"]\n",
        "metrics.set_index(\"epoch\", inplace=True)\n",
        "display(metrics.dropna(axis=1, how=\"all\").head())\n",
        "sn.relplot(data=metrics, kind=\"line\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 715
        },
        "id": "JPD_tfFAMAHn",
        "outputId": "c2788d28-7a61-4b1d-f37e-b096c802185c"
      },
      "execution_count": 9,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "       val_loss  val_acc  test_loss  test_acc\n",
              "epoch                                        \n",
              "0      0.456975   0.8708        NaN       NaN\n",
              "1      0.334248   0.9000        NaN       NaN\n",
              "2      0.285680   0.9136        NaN       NaN\n",
              "3           NaN      NaN   0.255574    0.9235"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-9d7fe685-4ab5-422d-aacf-2e110d73965a\">\n",
              "    <div class=\"colab-df-container\">\n",
              "      <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>val_loss</th>\n",
              "      <th>val_acc</th>\n",
              "      <th>test_loss</th>\n",
              "      <th>test_acc</th>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>epoch</th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>0.456975</td>\n",
              "      <td>0.8708</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>0.334248</td>\n",
              "      <td>0.9000</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>0.285680</td>\n",
              "      <td>0.9136</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>0.255574</td>\n",
              "      <td>0.9235</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "      <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-9d7fe685-4ab5-422d-aacf-2e110d73965a')\"\n",
              "              title=\"Convert this dataframe to an interactive table.\"\n",
              "              style=\"display:none;\">\n",
              "        \n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "       width=\"24px\">\n",
              "    <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
              "    <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
              "  </svg>\n",
              "      </button>\n",
              "      \n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      flex-wrap:wrap;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "      <script>\n",
              "        const buttonEl =\n",
              "          document.querySelector('#df-9d7fe685-4ab5-422d-aacf-2e110d73965a button.colab-df-convert');\n",
              "        buttonEl.style.display =\n",
              "          google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "        async function convertToInteractive(key) {\n",
              "          const element = document.querySelector('#df-9d7fe685-4ab5-422d-aacf-2e110d73965a');\n",
              "          const dataTable =\n",
              "            await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                     [key], {});\n",
              "          if (!dataTable) return;\n",
              "\n",
              "          const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "            '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "            + ' to learn more about interactive tables.';\n",
              "          element.innerHTML = '';\n",
              "          dataTable['output_type'] = 'display_data';\n",
              "          await google.colab.output.renderOutput(dataTable, element);\n",
              "          const docLink = document.createElement('div');\n",
              "          docLink.innerHTML = docLinkHtml;\n",
              "          element.appendChild(docLink);\n",
              "        }\n",
              "      </script>\n",
              "    </div>\n",
              "  </div>\n",
              "  "
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<seaborn.axisgrid.FacetGrid at 0x7fe1aad32610>"
            ]
          },
          "metadata": {},
          "execution_count": 9
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 610.25x500 with 1 Axes>"
            ],
            "image/png": "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n39ed999t5YuXaqvvvpKU6dO1Ycffqhbb721xo7vcvBZuHChxo0bp3nz5ikmJkazZs1SXFycUlNT1bRp03Lti4qKdP3116tp06ZatGiRQkJCdODAAQUGBtZE/QAAXBIWi6XKp5vqmpeXl2677Ta9//772rNnjzp06KDu3btLktatW6dRo0Y5w0R+fr7S0tJq5LgRERFasGCBCgoKnKM+69atk5ubmzp06OBs161bN3Xr1k2TJk1S79699cEHH+iaa66RJLVv317t27fXE088obvuuktvv/12jQYfl091zZw5U/fff79Gjx6tTp06ad68efLx8dFbb71VYfu33npL2dnZWrJkifr27avw8HD169evzPlFAABQs4YNG6alS5fqrbfe0rBhw5zr27Vrp8WLF2vz5s3asmWL7r777nJXgF3MMb28vDRy5Eht27ZNq1at0mOPPabhw4crODhY+/fv16RJk5SUlKQDBw5oxYoV2r17tyIiInTq1Ck9+uijWr16tQ4cOKB169bphx9+KDMHqCa4FHyKioqUnJys2NjY0h24uSk2NlZJSUkVbvPf//5XvXv31iOPPKLg4GB17txZM2bMUElJSaXHKSwsVF5eXpkFAABU3XXXXaegoCClpqbq7rvvdq6fOXOmGjZsqD59+ig+Pl5xcXHO0aCL5ePjo+XLlys7O1u9evXS7bffrgEDBmjOnDnO93fu3Kn/+7//U/v27fXAAw/okUce0Z/+9Ce5u7vr2LFjGjFihNq3b68hQ4Zo4MCBmjZtWo3Udo7FcOEauV9++UUhISFav369evfu7Vw/YcIErVmzRhs2bCi3TceOHZWWlqZhw4bp4Ycf1p49e/Twww/rz3/+s6ZOnVrhcZ5//vkKO5qbmyt/f/+qlgsAAFBGrV/VZbfb1bRpU/3rX/9Sjx49NHToUE2ePFnz5s2rdJtJkyYpNzfXuRw8eLC2ywQAACbg0iytxo0by93dXZmZmWXWZ2ZmqlmzZhVu07x5c3l6esrdvXRGekREhDIyMlRUVCSr1VpuG5vNJpvN5kppAACghr3//vv605/+VOF7YWFh2r59+yWu6OK5FHysVqt69OihxMREDR48WJJjRCcxMbHSmx717dtXH3zwgex2u9zcHANMu3btUvPmzSsMPQAA4PLwxz/+UTExMRW+V9N3VL5UXL4ub9y4cRo5cqR69uyp6OhozZo1SwUFBRo9erQkacSIEQoJCVFCQoIk6aGHHtKcOXP0+OOP67HHHtPu3bs1Y8YM/fnPf67ZngAAgBrl5+cnPz+/ui6jRrkcfIYOHaqjR49qypQpysjIUFRUlJYtW6bg4GBJjttNnxvZkaTQ0FAtX75cTzzxhLp27aqQkBA9/vjjevrpp2uuFwAAAFXg0lVddSUvL08BAQFc1QUAAC4Kz+oCAACmQfABAACmQfABAACmQfABAACmQfABAABlhIeHa9asWXVdRq0g+AAAANMg+AAAANMg+AAAUI/861//UosWLWS328usv+WWW3Tvvfdq7969uuWWWxQcHCxfX1/16tVLX3/9dbWPN3PmTHXp0kUNGjRQaGioHn74YeXn55dps27dOvXv318+Pj5q2LCh4uLilJOTI8nx6Ku//e1vatu2rWw2m1q1aqW//vWv1a7ntxB8AABwRVHBhZeSM6VtzxRduG3xqdK2hlFxGxfdcccdOnbsmFatWuVcl52drWXLlmnYsGHKz8/XoEGDlJiYqE2bNunGG29UfHy80tPTq/XrcHNz0+uvv67t27frnXfe0TfffKMJEyY439+8ebMGDBigTp06KSkpSWvXrlV8fLxKSkokSZMmTdKLL76o5557Tjt27NAHH3zgfBpEbeDOzQAAuOL5gAu/f8cC6epbHa9XPCutn1152xbdpAdWO14XZEl/b1PB8XJdLnHw4MFq1KiR5s+fL8kxCjRt2jQdPHiwzGOlzuncubMefPBB5wPHw8PDNXbsWI0dO9blYy9atEgPPvigsrKyJEl333230tPTtXbt2nJtT5w4oSZNmmjOnDkaM2aMy8eqDkZ8AACoZ4YNG6ZPPvlEhYWFkqT3339fd955p9zc3JSfn6/x48crIiJCgYGB8vX1VUpKSrVHfL7++msNGDBAISEh8vPz0/Dhw3Xs2DGdPHlSUumIT0VSUlJUWFhY6fu1weWHlAIAYGrP/HLh991tpa+vmyL1n1R5W8t54w8+jX5731UUHx8vwzC0dOlS9erVS99++61effVVSdL48eO1cuVKvfzyy2rbtq28vb11++23q6ioyOXjpKWl6eabb9ZDDz2kv/71rwoKCtLatWt13333qaioSD4+PvL29q50+wu9V1sIPgAAuMLaoOptPaySrFVra7G4tu8L8PLy0m233ab3339fe/bsUYcOHdS9e3dJjonGo0aN0q23Ok7H5efnKy0trVrHSU5Olt1u1yuvvOI8hfbRRx+VadO1a1clJiZq2rRp5bZv166dvL29lZiYeMlOdRF8AACoh4YNG6abb75Z27dv1z333ONc365dOy1evFjx8fGyWCx67rnnyl0BVlVt27ZVcXGxZs+erfj4eK1bt07z5s0r02bSpEnq0qWLHn74YT344IOyWq1atWqV7rjjDjVu3FhPP/20JkyYIKvVqr59++ro0aPavn277rvvvovqf2WY4wMAQD103XXXKSgoSKmpqbr77rud62fOnKmGDRuqT58+io+PV1xcnHM0yFWRkZGaOXOmXnrpJXXu3Fnvv/++EhISyrRp3769VqxYoS1btig6Olq9e/fWZ599Jg8Px9jLc889pyeffFJTpkxRRESEhg4dqiNHjlS/47+Bq7oAAIBpMOIDAABMg+ADAAAq9P7778vX17fC5eqrr67r8qqFU10AAKBCJ06cUGZmZoXveXp6Kiws7BJXdPG4qgsAAFTIz89Pfn5+dV1GjeJUFwAAMA2CDwAAMA2CDwAAMA2CDwAAMA2CDwAAMA2CDwAAqFFpaWmyWCzavHlzXZdSDsEHAIB6pn///ho7dmyN7W/UqFEaPHhwje2vLhF8AACAaRB8AACoR0aNGqU1a9botddek8VikcViUVpamrZt26aBAwfK19dXwcHBGj58uLKyspzbLVq0SF26dJG3t7caNWqk2NhYFRQU6Pnnn9c777yjzz77zLm/1atXu1zXmjVrFB0dLZvNpubNm2vixIk6c+bMbx5fklavXq3o6Gg1aNBAgYGB6tu3rw4cOFCt3w/BBwAAF5wsPqmTxSd17olPp86c0snikyqxl0iSCksKdbL4pIrtxZKk4pJinSw+qaKSIknSGfsZnSw+qdNnTkuS7Ibduc/KjuGK1157Tb1799b999+vw4cP6/Dhw/Lz89N1112nbt266ccff9SyZcuUmZmpIUOGSJIOHz6su+66S/fee69SUlK0evVq3XbbbTIMQ+PHj9eQIUN04403OvfXp08fl2o6dOiQBg0apF69emnLli164403NH/+fP3lL3/5zeOfOXNGgwcPVr9+/fTTTz8pKSlJDzzwgCwWi8u/G0mScQXIzc01JBm5ubl1XQoAwOQ6L+hsdF7Q2Th26phhGIZxy6e3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rFmzRo888oi+++47rVy5UsXFxbrhhhtUUFBQ6Tb14btenX5L9eN73rJlS7344otKTk7Wjz/+qOuuu0633HKLtm/fXmH7+vB5oxYZ9Uh0dLTxyCOPOH8uKSkxWrRoYSQkJFTYfsiQIcZNN91UZl1MTIzxpz/9qVbrrA2u9v3tt982AgICLlF1l4Yk49NPP71gmwkTJhhXX311mXVDhw414uLiarGy2leVvq9atcqQZOTk5FySmi6VI0eOGJKMNWvWVNqmPn3Xz6lKv+vj9/ychg0bGv/v//2/Ct+rj583ak69GfEpKipScnKyYmNjnevc3NwUGxurpKSkCrdJSkoq016S4uLiKm1/uapO3yUpPz9fYWFhCg0NveC/nuqT+vKZX4yoqCg1b95c119/vdatW1fX5Vy03NxcSVJQUFClberj516Vfkv173teUlKiDz/8UAUFBerdu3eFberj542aU2+CT1ZWlkpKShQcHFxmfXBwcKVzGDIyMlxqf7mqTt87dOigt956S5999pnee+892e129enTRz///POlKLnOVPaZ5+Xl6dSpU3VU1aXRvHlzzZs3T5988ok++eQThYaGqn///tq4cWNdl1ZtdrtdY8eOVd++fdW5c+dK29WX7/o5Ve13ffqeb926Vb6+vrLZbHrwwQf16aefqlOnThW2rW+fN2rWFfGQUtS83r17l/nXUp8+fRQREaF//vOfmj59eh1WhtrSoUMHdejQwflznz59tHfvXr366qv697//XYeVVd8jjzyibdu2ae3atXVdyiVV1X7Xp+95hw4dtHnzZuXm5mrRokUaOXKk1qxZU2n4ASpTb0Z8GjduLHd3d2VmZpZZn5mZqWbNmlW4TbNmzVxqf7mqTt9/zdPTU926ddOePXtqo8TLRmWfub+/v7y9veuoqroTHR19xX7mjz76qL744gutWrVKLVu2vGDb+vJdl1zr969dyd9zq9Wqtm3bqkePHkpISFBkZKRee+21CtvWp88bNa/eBB+r1aoePXooMTHRuc5utysxMbHS88C9e/cu016SVq5cWWn7y1V1+v5rJSUl2rp1q5o3b15bZV4W6stnXlM2b958xX3mhmHo0Ucf1aeffqpvvvlGV1111W9uUx8+9+r0+9fq0/fcbrersLCwwvfqw+eNWlTXs6tr0ocffmjYbDZjwYIFxo4dO4wHHnjACAwMNDIyMgzDMIzhw4cbEydOdLZft26d4eHhYbz88stGSkqKMXXqVMPT09PYunVrXXWh2lzt+7Rp04zly5cbe/fuNZKTk40777zT8PLyMrZv315XXaiWEydOGJs2bTI2bdpkSDJmzpxpbNq0yThw4IBhGIYxceJEY/jw4c72+/btM3x8fIynnnrKSElJMebOnWu4u7sby5Ytq6suVJurfX/11VeNJUuWGLt37za2bt1qPP7444abm5vx9ddf11UXquWhhx4yAgICjNWrVxuHDx92LidPnnS2qY/f9er0u758zydOnGisWbPG2L9/v/HTTz8ZEydONCwWi7FixQrDMOrn543aU6+Cj2EYxuzZs41WrVoZVqvViI6ONr777jvne/369TNGjhxZpv1HH31ktG/f3rBarcbVV19tLF269BJXXHNc6fvYsWOdbYODg41BgwYZGzdurIOqL865S7R/vZzr68iRI41+/fqV2yYqKsqwWq1G69atjbfffvuS110TXO37Sy+9ZLRp08bw8vIygoKCjP79+xvffPNN3RR/ESrqs6Qyn2N9/K5Xp9/15Xt+7733GmFhYYbVajWaNGliDBgwwBl6DKN+ft6oPTydHQAAmEa9meMDAADwWwg+AADANAg+AADANAg+AADANAg+AADANAg+AADANAg+AADANAg+AADANAg+AMpYvXq1LBaLjh8/XtelAECNI/gAAADTIPgAAADTIPgAlxm73a6EhARdddVV8vb2VmRkpBYtWiSp9DTU0qVL1bVrV3l5eemaa67Rtm3byuzjk08+0dVXXy2bzabw8HC98sorZd4vLCzU008/rdDQUNlsNrVt21bz588v0yY5OVk9e/aUj4+P+vTpo9TU1NrtOABcAgQf4DKTkJCgd999V/PmzdP27dv1xBNP6J577tGaNWucbZ566im98sor+uGHH9SkSRPFx8eruLhYkiOwDBkyRHfeeae2bt2q559/Xs8995wWLFjg3H7EiBH6z3/+o9dff10pKSn65z//KV9f3zJ1TJ48Wa+88op+/PFHeXh46N57770k/QeA2sTT2YHLSGFhoYKCgvT111+rd+/ezvVjxozRyZMn9cADD+jaa6/Vhx9+qKFDh0qSsrOz1bJlSy1YsEBDhgzRsGHDdPToUa1YscK5/YQJE7R06VJt375du3btUocOHbRy5UrFxsaWq2H16tW69tpr9fXXX2vAgAGSpC+//FI33XSTTp06JS8vr1r+LQBA7WHEB7iM7NmzRydPntT1118vX19f5/Luu+9q7969znbnh6KgoCB16NBBKSkpkqSUlBT17du3zH779u2r3bt3q6SkRJs3b5a7u7v69et3wVq6du3qfN28eXNJ0pEjRy66jwBQlzzqugAApfLz8yVJS5cuVUhISJn3bDZbmfBTXd7e3lVq5+np6XxtsVgkOeYfAcCVjBEf4DLSqVMn2Ww2paenq23btmWW0NBQZ7vvvvvO+TonJ0e7du1SRESEJCkiIkLr1q0rs99169apffv2cnd3V5cuXWS328vMGQIAs2DEB7iM+Pn5afz48XriiSdkt9v1u9/9Trm5uVq3bp38/f0VFhYmSXrhhRfUqFEjBQcHa/LkyWrcuLEGDx4sSXryySfVq1cvTZ8+XUOHDlVSUpLmzJmjf/zjH5Kk8PBwjRw5Uvfee69ef/11RUZG6sCBAzpy5IiGDBlSV10HgEuC4ANcZqZPn64mTZooISFB+/btU2BgoLp3765nnnnGearpxRdf1OOPP67du3crKipKn3/+uaxWqySpe/fu+uijjzRlyhRNnz5dzZs31wsvvKBRo0Y5j/HGG2/omWee0cMPP6xjx46pVatWeuaZZ+qiuwBwSXFVF3AFOXfFVU5OjgIDA+u6HAC44jDHBwAAmAbBBwAAmAanugAAgGkw4gMAAEyD4AMAAEyD4AMAAEyD4AMAAEyD4AMAAEyD4AMAAEyD4AMAAEyD4AMAAEyD4AMAAEzj/wOf3TD94PYOzgAAAABJRU5ErkJggg==\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "## 使用检查点\n",
        "一旦你训练了模型，你可以导出到onnx, torchscript，并将其投入生产或简单地加载权重和运行预测。"
      ],
      "metadata": {
        "id": "jtwAIB0Lt_XU"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "from torchvision.transforms import ToTensor\n",
        "from torch import optim, nn, utils, Tensor\n",
        "\n",
        "# 定义任意个数的神经网络模块(或使用您当前的模块)\n",
        "encoder = nn.Sequential(nn.Linear(28 * 28, 64), nn.ReLU(), nn.Linear(64, 3))\n",
        "decoder = nn.Sequential(nn.Linear(3, 64), nn.ReLU(), nn.Linear(64, 28 * 28))\n",
        "\n",
        "\n",
        "# 定义 LightningModule\n",
        "class LitAutoEncoder(L.LightningModule):\n",
        "    def __init__(self, encoder, decoder):\n",
        "        super().__init__()\n",
        "        self.encoder = encoder\n",
        "        self.decoder = decoder\n",
        "\n",
        "    def training_step(self, batch, batch_idx):\n",
        "        # Training_step定义了train循环。\n",
        "        # 它与前向传播无关\n",
        "        x, y = batch\n",
        "        x = x.view(x.size(0), -1)\n",
        "        z = self.encoder(x)\n",
        "        x_hat = self.decoder(z)\n",
        "        loss = nn.functional.mse_loss(x_hat, x)\n",
        "        # 默认情况下登录到TensorBoard(如果已安装)\n",
        "        self.log(\"train_loss\", loss)\n",
        "        return loss\n",
        "\n",
        "    def configure_optimizers(self):\n",
        "        optimizer = optim.Adam(self.parameters(), lr=1e-3)\n",
        "        return optimizer\n",
        "\n",
        "\n",
        "# 初始化自动编码器\n",
        "autoencoder = LitAutoEncoder(encoder, decoder)"
      ],
      "metadata": {
        "id": "s4z_t386uk7D"
      },
      "execution_count": 26,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# 配置数据\n",
        "dataset = MNIST(os.getcwd(), download=True, transform=ToTensor())\n",
        "train_loader = utils.data.DataLoader(dataset)"
      ],
      "metadata": {
        "id": "_5tl4k_bzab1"
      },
      "execution_count": 23,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# 训练模型(提示:这里有一些有助于快速迭代想法的训练器参数)\n",
        "trainer = L.Trainer(limit_train_batches=100, max_epochs=1)\n",
        "trainer.fit(model=autoencoder, train_dataloaders=train_loader)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 637,
          "referenced_widgets": [
            "873635b03afd4548b5d8299132400e25",
            "56a317f4269240388be8556afea74c5c",
            "9dfd51f18e5b4528b966fb70e6f0f14a",
            "94211de1bdf84c599b3b6da9a3edaa56",
            "090016de310646429d3dc4ee465c5b22",
            "63a3b9beebd04ff18ac218d03a3e524b",
            "4ca6c373bff44417b169cad04b6677c1",
            "2abfaeadd5964520b0ffd39ab8c573f1",
            "ee5a04fefeeb4bb1821f8e9172ba4cfc",
            "afdfd0152e3c4b20ac676e35bc65dbdc",
            "6d33919b51d747eaa6bfef09451a816d"
          ]
        },
        "id": "NzGM7ZDezyvV",
        "outputId": "47896891-c1b5-45e2-f80a-acf66d867bc4"
      },
      "execution_count": 24,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "INFO: GPU available: True (cuda), used: True\n",
            "INFO:lightning.pytorch.utilities.rank_zero:GPU available: True (cuda), used: True\n",
            "INFO: TPU available: False, using: 0 TPU cores\n",
            "INFO:lightning.pytorch.utilities.rank_zero:TPU available: False, using: 0 TPU cores\n",
            "INFO: IPU available: False, using: 0 IPUs\n",
            "INFO:lightning.pytorch.utilities.rank_zero:IPU available: False, using: 0 IPUs\n",
            "INFO: HPU available: False, using: 0 HPUs\n",
            "INFO:lightning.pytorch.utilities.rank_zero:HPU available: False, using: 0 HPUs\n",
            "INFO: LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0]\n",
            "INFO:lightning.pytorch.accelerators.cuda:LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0]\n",
            "INFO: \n",
            "  | Name    | Type       | Params\n",
            "---------------------------------------\n",
            "0 | encoder | Sequential | 50.4 K\n",
            "1 | decoder | Sequential | 51.2 K\n",
            "---------------------------------------\n",
            "101 K     Trainable params\n",
            "0         Non-trainable params\n",
            "101 K     Total params\n",
            "0.407     Total estimated model params size (MB)\n",
            "INFO:lightning.pytorch.callbacks.model_summary:\n",
            "  | Name    | Type       | Params\n",
            "---------------------------------------\n",
            "0 | encoder | Sequential | 50.4 K\n",
            "1 | decoder | Sequential | 51.2 K\n",
            "---------------------------------------\n",
            "101 K     Trainable params\n",
            "0         Non-trainable params\n",
            "101 K     Total params\n",
            "0.407     Total estimated model params size (MB)\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "Training: 0it [00:00, ?it/s]"
            ],
            "application/vnd.jupyter.widget-view+json": {
              "version_major": 2,
              "version_minor": 0,
              "model_id": "873635b03afd4548b5d8299132400e25"
            }
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "INFO: `Trainer.fit` stopped: `max_epochs=1` reached.\n",
            "INFO:lightning.pytorch.utilities.rank_zero:`Trainer.fit` stopped: `max_epochs=1` reached.\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# 加载检查点\n",
        "checkpoint = \"./lightning_logs/version_1/checkpoints/epoch=0-step=100.ckpt\"\n",
        "autoencoder = LitAutoEncoder.load_from_checkpoint(checkpoint, encoder=encoder, decoder=decoder)\n",
        "\n",
        "# 选择训练过的模型检查点\n",
        "encoder = autoencoder.encoder\n",
        "encoder.eval()\n",
        "\n",
        "# 嵌入4个假照片\n",
        "fake_image_batch = Tensor(4, 28 * 28)\n",
        "embeddings = encoder(fake_image_batch)\n",
        "print(\"⚡\" * 20, \"\\nPredictions (4 image embeddings):\\n\", embeddings, \"\\n\", \"⚡\" * 20)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "aVKFHH420VAN",
        "outputId": "82fcbe81-e63b-4838-a930-b529a59930e7"
      },
      "execution_count": 27,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡ \n",
            "Predictions (4 image embeddings):\n",
            " tensor([[        nan,         nan,         nan],\n",
            "        [ 4.3371e+33,  4.7065e+33,  9.7927e+33],\n",
            "        [-3.6677e+32,  2.6193e+33, -7.8837e+33],\n",
            "        [-5.1699e+00,  8.2749e+00, -5.7268e+00]], grad_fn=<AddmmBackward0>) \n",
            " ⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡⚡\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "## 参考\n",
        "https://lightning.ai/docs/pytorch/latest/notebooks/lightning_examples/mnist-hello-world.html"
      ],
      "metadata": {
        "id": "TC5wNaQwOayn"
      }
    }
  ]
}